<?php
/**
 * Created by 784855684@qq.com.
 * Link: https://github.com/lichtung/inframe
 * User: linzh
 * Date: 6/25/17
 * Time: 5:14 PM
 */



namespace inframe\helper\traits;


use inframe\core\Response;

trait Redirect
{
    /**
     * 页面跳转
     * 与URI::redirect的区别是后者认为参数中的url是一个有效的跳转链接
     * @param string $compo 形式如'Cms/install/third' 的action定位
     * @param array $params URL参数
     * @param int $time 等待时间
     * @param string $message 跳转等待提示语
     * @return void
     */
    protected function redirect($compo, array $params = [], $time = 0, $message = '')
    {
    }

    /**
     * 默认跳转操作 支持错误导向和正确跳转
     * 调用模板显示 默认为public目录下面的success页面
     * 提示页面为可配置 支持模板标签
     * @param string $message 提示信息
     * @param string $title 跳转页面标题
     * @param bool $status 页面状态,true为积极的一面，false为消极的一面
     * @param string|bool $jumpbackorurl 页面操作，true时表示返回之前的页面，false时提示完毕后自动关闭窗口,如果是string则表示立即跳转
     * @param int $wait 页面等待时间
     * @return void
     */
    protected static function jump($message, $title = '跳转', $status = true, $jumpbackorurl = true, $wait = 1)
    {
        Response::sendNocache(true);//保证输出不受静态缓存影响
        $vars = [];
        $vars['wait'] = $wait;
        $vars['title'] = $title;
        $vars['message'] = $message;
        $vars['status'] = $status ? 1 : 0;

        if (is_bool($jumpbackorurl)) {
            $vars['url'] = $jumpbackorurl ?
                'javascript:history.back(-1);' :
                'javascript:window.close();';
            \inframe::template('jump', $vars);
        } else {
            Response::redirect($jumpbackorurl);
        }
    }

    /**
     * 跳转到成功显示页面
     * @param string $message 提示信息
     * @param int $waittime 等待时间
     * @param string $title 显示标题
     * @param bool|string $jumpbackorurl
     */
    protected function success($message, $waittime = 1, $title = 'success', $jumpbackorurl = true)
    {
        static::jump($message, $title, true, $jumpbackorurl, $waittime);
    }

    /**
     * 跳转到错误信息显示页面
     * @param string $message 提示信息
     * @param int $waittime 等待时间
     * @param string $title 显示标题
     * @param bool|string $jumpbackorurl
     */
    protected function failure($message, $waittime = 3, $title = 'error', $jumpbackorurl = true)
    {
        static::jump($message, $title, false, $jumpbackorurl, $waittime);
    }
}